Java Selenium WebDriver:无法访问下拉列表(未排序列表)的元素
我试图访问无序列表中的元素,但这似乎是个问题。这是我的功能代码Java Selenium WebDriver:无法访问下拉列表(未排序列表)的元素,java,selenium,selenium-webdriver,webdriver,Java,Selenium,Selenium Webdriver,Webdriver,我试图访问无序列表中的元素,但这似乎是个问题。这是我的功能代码 public void getLinks() throws Exception { new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.id("create-study"))); driver.findElement(By.id("create-study")).click()
public void getLinks() throws Exception
{
new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.id("create-study")));
driver.findElement(By.id("create-study")).click();
Thread.sleep(600);
List<WebElement> studyLinks = driver.findElements(By.cssSelector("#warren-nav > div.collapse.navbar-collapse.navbar-ex1-collapse > ul > li.dropdown.open > ul"));
int sSize = studyLinks.size();
System.out.println("No of links: " + sSize);
}
public void getLinks()引发异常
{
新WebDriverWait(驱动程序,10)。直到(预期条件。元素的可视性定位(By.id(“创建研究”)));
driver.findElement(By.id(“创建研究”))。单击();
睡眠(600);
List studyLinks=driver.findElements(按.cssSelector(“#warren nav>div.collapse.navbar-collapse.navbar-ex1-collapse>ul>li.dropdown.open>ul”);
int sSize=studyLinks.size();
System.out.println(“链接数:+sSize”);
}
我在我的测试用例中,在另一个类中调用上述函数(该类没有问题,所以不在这里发布)
列表的HTML为:
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#" id="create-study">
<i class="fa fa-plus-circle warren-nav-icon"></i>Create
</a>
<ul class="dropdown-menu create-dropdown">
<li data-study-type="event">
<a href="/finance/warren/studies/new/kensho.event" class="create-study-link event" target="_self">
<i class="fa fa-calendar" title="event"></i> Event Analysis
</a>
</li>
<li data-study-type="cyclical">
<a href="/finance/warren/studies/new/kensho.cyclical" class="create-study-link cyclical" target="_self">
<i class="fa fa-retweet" title="cyclical"></i> Cyclical Analysis
</a>
</li>
<li data-study-type="conditional">
<a href="/finance/warren/studies/new/kensho.conditional" class="create-study-link conditional" target="_self">
<i class="fa fa-random" title="conditional"></i> Conditional Analysis
</a>
</li>
<li data-study-type="multi_condition">
<a href="/finance/warren/studies/new/kensho.multi_condition" class="create-study-link multi_condition" target="_self">
<i class="fa fa-random" title="multi_condition"></i> Multiple Conditions Analysis
</a>
</li>
<li data-study-type="relative">
<a href="/finance/warren/studies/new/kensho.relative" class="create-study-link relative" target="_self">
<i class="fa fa-bar-chart-o" title="relative"></i> Relative Analysis
</a>
</li>
<li data-study-type="relative_multiple">
<a href="/finance/warren/studies/new/kensho.relative_multiple" class="create-study-link relative_multiple" target="_self">
<i class="fa fa-bar-chart-o" title="relative_multiple"></i> Relative Analysis: Multiple Date Ranges
</a>
</li>
<li data-study-type="regime_change">
<a href="/finance/warren/studies/new/kensho.regime_change" class="create-study-link regime_change" target="_self">
<i class="fa fa-globe" title="regime_change"></i> Global Scenario Analysis
</a>
</li>
<li data-study-type="consensus_analysis">
<a href="/finance/warren/studies/new/kensho.consensus_analysis" class="create-study-link consensus_analysis" target="_self">
<i class="fa fa-puzzle-piece" title="consensus_analysis"></i> Economic Consensus/Surprise Analysis
</a>
</li>
<li data-study-type="trigger">
<a href="/finance/warren/studies/new/kensho.trigger" class="create-study-link trigger" target="_self">
<i class="fa fa-random" title="trigger"></i> Trigger Analysis
</a>
</li>
<li data-study-type="earnings_analysis">
<a href="/finance/warren/studies/new/kensho.earnings_analysis" class="create-study-link earnings_analysis" target="_self">
<i class="fa fa-dot-circle-o" title="earnings_analysis"></i> Earnings Consensus/Surprise Analysis
</a>
</li>
<li data-study-type="price_movement_analysis">
<a href="/finance/warren/studies/new/kensho.price_movement_analysis" class="create-study-link price_movement_analysis" target="_self">
<i class="fa fa-line-chart" title="price_movement_analysis"></i> Price Movement Trigger Analysis
</a>
</li>
</ul>
</li>
-
-
-
-
-
-
-
-
-
-
-
HTML代码的检查如下:,
第一行表示一个按钮单击,显示下拉列表,下一行表示包含列表元素的div容器。当我运行我的测试用例时,我得到的大小是1,而链接的数量是11
谁能告诉我我做错了什么吗。谢谢我想你停得太早了,因为你想数一数a元素,你还需要“询问”它们 我还将选择器缩减到有趣的部分:
List<WebElement> studyLinks = driver.findElements(By.cssSelector(" li.dropdown > ul > a"));
List studyLinks=driver.findElements(By.cssSelector(“li.dropdown>ul>a”);
基本上,您需要在css查询中添加“>a”
我在css查询中不理解的是,您试图找到一个li元素,它的类为“dropdown”和“open”,其中html代码只显示一个带有“dropdown”类的li,而不显示一个带有“open”类的li。但可能您没有发布所有代码。如果您不介意使用xpath:
List<WebElement> studyLinks = driver.findElements(By.xpath("//*[contains(@href, 'finance')]"));
List studyLinks=driver.findElements(By.xpath(“//*[contains(@href,'finance')]”);
旁注。。。您可以在函数的第一行执行此操作,然后左转并执行线程。sleep()
两行之后:(为什么不使用另一个wait.until()
来处理单击后的任何更改?Thread.sleeps()
应该避免,原因有两个……1)如果有时600毫秒的时间不够呢?那么你的测试还是失败了。2) 如果600毫秒的时间太长怎么办?即使页面已准备就绪,您的测试仍将等待。使用适当的等待,您的测试将更快,更不容易间断中断。当您发布HTML时,请使用类似的HTML格式化程序。它使它更易于阅读,使用起来也非常简单和快捷。@JeffC我使用Thread.sleep(),因为我希望我的执行在那一点上等待600毫秒,即使元素是可见的,但我需要它等待这一次。如果有其他方法可以做到这一点,请告诉我。