提问者:小点点

Selenium网络驱动程序问题:预期条件失败:等待位于(…)的元素的可见性


我的自动化测试几乎没有问题。当我的测试出错时:

预期条件失败:等待位于(…)的元素的可见性

我不知道什么是问题。

@BeforeMethod
public void BeforeTest(){
    System.setProperty("webdriver.chrome.driver", "C:/drivers/chromedriver.exe");
    driver = new ChromeDriver();
    driver.manage().window().maximize();
    driver.navigate().to("https://poczta.o2.pl/rejestracja/");
}

@Test
public void Test(){
    WebDriverWait wait = new WebDriverWait(driver, 10);
    WebElement Category_Body = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("[name='9cb78dee-04b3-01d5-524b-9159a1646cd3']")));

    WebElement user = driver.findElement(By.cssSelector("[name='9cb78dee-04b3-01d5-524b-9159a1646cd3']"));
    user.sendKeys("Cezary");

    WebElement user2 = driver.findElement(By.cssSelector("input[name*='42aced']"));
    user2.sendKeys("Znojek");

    WebElement male = driver.findElement(By.id("male"));
    ((WebElement) male).click();
}

我的问题是什么?


共1个答案

匿名用户

似乎名称9cb78dee-04b3-01d5-524b-9159a1646cd3是动态的。例如,当我现在加载页面时,“名字”元素如下所示:

<input type="text" name="2a810eef-304a-e7bb-d148-f9655e639f02" aria-labelledby="0bd5980e-a03a-4dd9-1302-105b999c3afc" class="invalid sc-bZQynM bZqAGh" autocomplete="off" value="">

所以你不能用它来识别对象。对于那种特定的形式,我建议查找标签,然后获取与之关联的输入字段。它们都包含在同一个div中,所以很容易区分:

<div class="">
    <label id="790a1161-7317-afc5-7563-1973254ccc96" class="sc-dnqmqq dsXufX">Imię</label>
    <input type="text" name="885f994f-f81e-7142-c3f0-61420449b0b7" aria-labelledby="790a1161-7317-afc5-7563-1973254ccc96" class="sc-bZQynM bZqAGh" autocomplete="off" value="">
</div>

在XPath中,它可以这样表达:

//label[text()='Imię']/../input

(选择标签,返回父级再选择同一父级下的输入字段)

这样的选择在语义上也更好,因为它非常清楚你在选择什么(名称字段),而不是通过GUID进行选择,GUID不会告诉你你在选择什么。

在CSS选择器中,恐怕这是不可能的,因为它不支持通过文本进行选择(我可能错了,因为CSS选择器不是我的强项)。