Selenium webdriver问题,具有:预期条件失败:等待由(..)

时间:2018-11-17 16:50:11

标签: java css selenium selenium-webdriver

我的自动化测试没什么问题。当我的测试出错时:

  

预期条件失败:正在等待由(...)定位的元素

我不知道这是什么问题。

@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();
}

enter image description here

我怎么了?

1 个答案:

答案 0 :(得分: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进行选择(它不会告诉您所选择的内容)相比,它很清楚您正在选择的内容(名称字段)。

恐怕在CSS选择器中这是不可能的,因为它不支持按文本选择(我可能是错的,因为CSS选择器不是我的特长)。