繁体   English   中英

Selenium Webdriver如何单击列表内的按钮

[英]Selenium webdriver How to click on a button inside a list

我想在硒鼓驱动程序中单击一个按钮,在硒鼓驱动程序中使用java.Like,如图所示。 我尝试使用li的id,但是不起作用:

    WebElement slick0 = driver.findElement(By.id("slick-slide00"));
    wait.until(ExpectedConditions.visibilityOf(slick0));
    slick0.click();

我尝试使用xpath,但使用firepath也不起作用:

    WebElement slick1 = driver.findElement(By.xpath(".//*[@id='slick-slide01']/button"));

    System.out.println("click sign");
    slick1.click();

这就是我在控制台中得到的

Element info: {Using=xpath, value=.//*[@id='slick-slide01']/button}
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:215)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:167)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:671)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:410)
at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:509)
at org.openqa.selenium.By$ByXPath.findElement(By.java:361)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:402)
at ChromeTests.FirstChrome.main(FirstChrome.java:32)

有人能告诉我应该选择哪个选择器。

谢谢。

在此处输入图片说明

 <ul class="slick-dots" style="display: block;" role="tablist"> <li id="slick-slide00" class="" aria-hidden="true" role="presentation" aria-selected="true" aria-controls="navigation00"> <li id="slick-slide01" class="slick-active" aria-hidden="false" role="presentation" aria-selected="false" aria-controls="navigation01"> <button type="button" data-role="none" role="button" aria-required="false" tabindex="0">2</button> </li> <li id="slick-slide02" aria-hidden="true" role="presentation" aria-selected="false" aria-controls="navigation02"> <li id="slick-slide03" aria-hidden="true" role="presentation" aria-selected="false" aria-controls="navigation03"> </ul> 

您可以尝试下面的代码,您可能必须尝试几个我将要介绍的不同事情。 由于实际上没有完整的DOM和页面,因此我没有测试以下代码。

整个想法是首先尝试获取包含“ ul”和“ li”标签的外部div。 下面是我尝试通过其查找外部父div的代码。

public WebElement getOuterDiv(){
          return  driver.findElement(By.xpath("//div[contains(@class, 'slick-list draggable')]"));
        }

现在,请确保上面的div类名称正确,如果您能够找到外部div,那就太好了,否则,请尝试在上一级查找div类“ slick-initiated slick-slider”

一旦有了外部div,然后尝试找到内部的“ ul”和“ li”类。 以下是用于定位我们已经找到的外部div类的内部元素的代码。

public void getUlElement(){
            getOuterDiv().findElement(By.className("slick-dots")).findElement(By.id("slick-slide01")).click();
        }

这是上述代码的说明,以及在未找到内部类名的情况下需要执行的操作。

getOuterDiv()。findElement(By.className(“ slick-dots”))在外部类的帮助下,我试图找到外部div类的内部元素,即。 如果findElement(By.className(“ slick-dots”))正常工作,则继续尝试,否则尝试使用findElement(By.tagName(“ ul”))找到带有标记名的内部。

最后,点击带有ID的最里面的“ li”标签。 findElement(By.id(“ slick-slide01”))。click();

让我知道您是否需要任何帮助,或者任何步骤不清楚或无法解决。

我不认为这是与定位器相关的问题,我遇到了类似的问题,其中定位器正确,但是硒无法执行单击,在这种情况下,我使用了Javascript并且它起作用了,另外我能想到的另一个原因是element您要在框架中单击的位置,而您创建的定位器指向默认框架中的元素。

您可以获取元素列表,如下所示:

public static List<WebElement> listElements(){
            return driver.findElements(By.xpath("//li[starts-with(@id, 'slick-slide')]"));
        }

然后,您可以使用for循环遍历数组中的每个元素,也可以使用listElements().get(i) ,其中“ i”是该列表中所需的任何按钮。 请注意,我无法对其进行测试,因此您可能需要在定位器上进行一些工作,但是该理论应该是正确的(在许多情况下,它对我有用)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM