有没有办法测试元素是否存在?任何findElement方法都会以异常结束,但这不是我想要的,因为它可能是一个元素不存在而且没关系,这不是测试的失败,因此异常不能成为解决方案.
我发现这篇文章:Selenium c#Webdriver:等到元素存在 但是这是C#而我不是很擅长.任何人都可以将代码翻译成Java吗?我很抱歉,我在Eclipse中尝试过但是我没有把它直接用到Java代码中.
这是代码:
public static class WebDriverExtensions{
public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds){
if (timeoutInSeconds > 0){
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
return wait.Until(drv => drv.FindElement(by));
}
return driver.FindElement(by);
}
}
Run Code Online (Sandbox Code Playgroud) 我需要从下拉菜单中选择一个元素.
例如,打开这个:
<select id="fruits01" class="select" name="fruits">
<option value="0">Choose your fruits:</option>
<option value="1">Banana</option>
<option value="2">Mango</option>
</select>
Run Code Online (Sandbox Code Playgroud)
所以首先我要点击它.我这样做:
inputElementFruits = driver.find_element_by_xpath("//select[id='fruits']").click()
Run Code Online (Sandbox Code Playgroud)(好吧,打开菜单)
Mango但它没有用.我正在寻找更优雅的方式来在测试期间刷新网页(我使用Selenium2).我只是发送F5键,但我想知道驱动程序是否有刷新整个网页的方法这是我的代码
while(driver.findElements(By.xpath("//*[text() = 'READY']")).size() == 0 )
driver.findElement(By.xpath("//body")).sendKeys(Keys.F5);
//element appear after text READY is presented
driver.findElement(By.cssSelector("div.column a")).click();
Run Code Online (Sandbox Code Playgroud)
也许是在手动刷新页面上查找元素的更好解决方案
我有一个运行许多测试的selenium测试套件,在每个新测试中,它打开了我打开的任何其他窗口顶部的浏览器窗口.在当地环境中工作时非常震动.有什么办法告诉selenium或操作系统(MAC)在后台打开窗口?
我有运行测试的盒子.看起来Jenkins会ssh并执行正在运行的特定作业中描述的命令.
在这里,我试图运行我的Selenium Webdriver测试,但它告诉我在启动firefox时出错.最终的想法是完全在这个盒子上运行网络测试,并拍摄一些错误的截图.
我正在使用selenium-java-2.25.jar,firefox 10,linux OS.
有趣的是,我可以手动ssh到框中,临时从盒子上的另一个用户复制魔术cookie(获得X隧道),做一个export DISPLAY=mydisplay:1.0,然后使用ant启动我的硒测试.这将带来firefox和测试就好了.
这里有各种各样的线程似乎有完全相同的问题,我想我已经尝试了大部分.这就是我所做的:
重新启动该框,使用VNC重新登录.
在运行selenium测试之前,在Jenkins中放置一个bash脚本来运行.bash脚本基本上只是做了一个export DISPLAY=mydisplay:1.0.它也执行xclock.这可以工作,因为我可以看到在VNC中显示xclock.
iptables已被关闭
firefox正确位于/ usr/bin/firefox中
sshd_config显示X11Forwarding为true.
据称降级firefox帮助了一些人,但我不想这样做.无论如何,Webdriver应该支持FF 10.
但是,上述都没有解决问题.
它似乎不存在localhost上的端口7055甚至存在:
netstat -an | grep 7055 - 什么都没打印
这是我的/ etc/hosts所说的:
1 127.0.0.1 localhost.localdomain localhost
2 ::1 localhost6.localdomain6 localhost6
Run Code Online (Sandbox Code Playgroud)
也许它与localhost有关:7055不存在?我不确定从哪里开始.仍然,为什么错误输出说它display: :0.0在我指定时正在寻找mydisplay:1.0?
最后我得到的错误输出:
[testng] org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output:
[testng] Xlib: connection to ":0.0" refused by server
[testng] Xlib: No protocol specified …Run Code Online (Sandbox Code Playgroud) 我希望它只是我,但Selenium Webdriver看起来像是一场彻头彻尾的噩梦.Chrome webdriver目前无法使用,而其他驱动程序则非常不可靠,或者看起来如此.我正在与许多问题作斗争,但这里有一个问题.
随机地,我的测试将失败
"org.openqa.selenium.StaleElementReferenceException: Element is no longer attached
to the DOM
System info: os.name: 'Windows 7', os.arch: 'amd64',
os.version: '6.1', java.version: '1.6.0_23'"
Run Code Online (Sandbox Code Playgroud)
我正在使用webdriver版本2.0b3.我已经看到FF和IE驱动程序发生这种情况.我可以阻止这种情况的唯一方法是Thread.sleep在异常发生之前添加实际调用.这是一个糟糕的解决方法,所以我希望有人可以指出我的错误,这将使这一切变得更好.
我想在Selenium进行一系列导航后获取当前网址.我知道有一个名为getLocation的命令用于ruby,但我找不到Python的语法.
有没有办法使用WebDriver(Selenium 2)和C#最大化浏览器窗口?
我想在下拉菜单中执行鼠标悬停功能.当我们将鼠标悬停在菜单上时,它会显示新选项.我尝试使用xpath单击新选项.但无法直接单击菜单.所以,作为我试图将鼠标悬停在下拉菜单上的手动方式,然后将单击新选项.
Actions action = new Actions(webdriver);
WebElement we = webdriver.findElement(By.xpath("//html/body/div[13]/ul/li[4]/a"));
action.moveToElement(we).build().perform();
Run Code Online (Sandbox Code Playgroud) 如何检查Web驱动程序是否存在元素?
真正使用try catch是唯一可行的方法吗?
boolean present;
try {
driver.findElement(By.id("logoutLink"));
present = true;
} catch (NoSuchElementException e) {
present = false;
}
Run Code Online (Sandbox Code Playgroud)