Web元素未被硒识别

时间:2017-09-14 10:36:47

标签: java selenium webdriver wait

我有一个包含在li元素内的按钮,该元素在其他元素加载后5秒出现。我必须单击此元素,但我无法使用selenium访问此元素。

我使用了隐式等待,显式等待和流畅等待。 Selenium仍然无法识别该元素,因为它以TimeoutException和NoSuchElementException终止。

HTML中的元素:

<li class="wow zoomIn" data-wow-delay="1.0s" data-reactid=".0.0.0.1.5" style="visibility: visible; animation-delay: 1s; animation-name: zoomIn;">
<button class="pip-icon-new" data-role="none" title="PIP" data-reactid=".0.0.0.1.5.0"/>
<span class="mt10 col-xs-12" data-reactid=".0.0.0.1.5.1">PIP</span>
</li>

流利等待:

Wait wait = new FluentWait(driver)
                   .withTimeout(30, TimeUnit.SECONDS)
                   .pollingEvery(5, TimeUnit.SECONDS)
                   .ignoring(NoSuchElementException.class);

        wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("button[data-reactid='.0.0.0.1.5.0']")));

显式等待:

WebElement myDynamicElement = (new WebDriverWait(driver, 10))
                  .until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='Home-page']/div[1]/ul/li[5]/button")));
                myDynamicElement.click();

隐含等待:

WebDriverWait wait=new WebDriverWait(driver, 20);
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("span[class='mt10 col-xs-12']")));

我错过了什么吗?

2 个答案:

答案 0 :(得分:0)

根据您提供的步骤/数据,我想您想点击带有 PIP 文字的按钮。现在查看HTML,我认为我们可以使用 click() ,即 ExplicitWait ,在按钮上调用WebDriverWait方法,如下所示:< / p>

WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//li[@class='wow zoomIn']")));
driver.findElement(By.xpath("//span[text()='PIP']")).click();

答案 1 :(得分:0)

您正在通过看起来像动态的数据反应堆进行标识。您可能要尝试按标题标识元素

wait.withTimeOut(15,TimeUnit SECONDS).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//button[@title='PIP']")));