应该很简单,我有以下代码: -
DesiredCapabilities capabilities = new DesiredCapabilities();
DesiredCapabilities.internetExplorer();
capabilities.setCapability("nativeEvents",false);
WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"),capabilities);
// And now use it
driver.get("dvfow01.mySite.com");
Thread.sleep(5000);
driver.findElement(By.linkText("Create")).click();
System.out.println("test");
driver.findElement(By.id("CreateDeal")).click();
它单击第一个项目(“创建”的linkText)但从未到达序列中的下一行。当我关闭浏览器时,它会点击下一行,打印出文本“test”,然后由于关闭窗口上没有元素,显然会立即崩溃。
有什么建议吗?我正在运行所有最新版本......
单击此链接会通过tagit.js扩展隐藏的部分,因此它看起来像下拉但不是......页面的html看起来像......
<li class="dropdown"><a href='#' class='collermenu dropdown-toggle' data-toggle='dropdown'>Create <b class='caret'></b></a>
<ul class="dropdown-menu">
<li><a id="createDeal">Deal</a></li>
<li><a id="second">someting</a></li>
<li><a id="third">something else</a></li>
<li><a id="fourth">a fourth</a></li>
<li><a id="fifth">the last</a></li>
</ul>
</li>
我和我的开发人员说过,他们告诉我他们正在运行一个名为signalr with everframe的东西,以便不断地回到服务器进行更新/弹出窗口等?
有人听说过这个或与硒一起使用吗?
答案 0 :(得分:3)
单击第一个项目(“创建”的linkText)但从未到达序列中的下一行。
这通常源于应用程序问题。 WebDriver将等到页面完全加载,我的猜测是它永远不会完全加载。有一个应用程序问题,这可以解释为什么在你关闭之后,它回应了那个。
我也愿意打赌,如果你等了足够长的时间,Selenium会吐出异常。
我提出的建议是先清理你的代码..
除非您希望它是专用服务器,否则请勿使用集线器。如果您在本地计算机上运行测试,只需使用本地webdriver实例。
DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability("nativeEvents",false);
WebDriver driver = new IEDriver(capabilities);
driver.get("http://myurl.com");
其次,取出并离开所有明确的等待,如Thread.sleep()
。 Selenium有所谓的隐式等待。如果这些还不够,请编写自己的方法,例如waitForElement(By)
等待出现的内容。
此外,它可能有助于解释点击<a href="someurl">Create</a>
编辑完成后,我可以给你更多指示。如果您的方案是......
- 点击链接。
- 点击下拉列表中的项目。
醇>
然后你可以做类似的事情 -
driver.findElement(By.cssSelector("li.dropdown > a[data-toggle='dropdown']")).click();
driver.findElement(By.cssSelector("li.dropdown li > a#createDeal")).click();
由于我不喜欢这些手动findElements,我想与您分享一个很棒的项目来帮助您开始使用Selenium WebDriver Java。 Getting started with selenium (java) on GitHub
这是一个非常实用的项目,包括流畅的样式界面,并将您从所有这些driver.findElement()
中抽象出来。你的测试看起来像,
@Config(url="http://mysite.com", browser=Browsers.IE)
public class MyTest extends AutomationTest {
@Test
public void test() {
// we will be at mysite.com right now.
click(By.cssSelector("li.dropdown > a[data-toggle='dropdown']")
.click(By.cssSelector("li.dropdown li > a#createDeal"))
.validatePresent(By.id("someIdThatAppearsAFterClicking"));
}
}
答案 1 :(得分:1)
我能想到的唯一解决方案是改变开发人员在我们的开发环境中使用signalR的方法。他们正在使用永久帧,但这只是不用硒球,所以我不得不让他们改回长轮询。在dev vs live中使用不同的配置并不理想,但它会解决问题......
答案 2 :(得分:0)
试试这个示例代码:
JavascriptExecutor executor= (JavascriptExecutor)driver;
executor.executeScript("document.getElementById('ID').style.display='block';");
Select select = new Select(driver.findElement(By.id("ID")));
select.selectByVisibleText("value");
Thread.sleep(6000);
通过使用javascript执行器并使元素可见,然后单击元素到ID。希望它有所帮助..