djo*_*dal 96 java selenium-webdriver
我正在使用Selenium 2 Java API和FirefoxDriver.当我填写表单时,根据表单输入将复选框添加到页面.
我想使用Selenium模拟这些复选框的点击.该元素在常规浏览器中可见并可用,但selenium断言元素不可见.
"Element is not currently visible and so may not be interacted with"
Run Code Online (Sandbox Code Playgroud)
我可以强制硒忽略元素的不可见状态吗?如何强制Selenium与不可见元素进行交互?
luk*_*eis 101
Selenium通过以下标准确定元素是否可见(使用DOM检查器确定哪些css适用于您的元素,请确保查看计算样式):
您的元素符合其中一个条件.如果你没有能力改变元素的样式,那么你可以通过javascript强制执行它(自从你说Selenium2 API后就假设WebDriver):
((JavascriptExecutor)driver).executeScript("arguments[0].checked = true;", inputElement);
Run Code Online (Sandbox Code Playgroud)
但这不会触发javascript事件,如果您依赖于该输入的更改事件,您也必须触发它(许多方法都可以这样做,最容易使用该页面上加载的任何javascript库).
能见度检查的来源 -
https://github.com/SeleniumHQ/selenium/blob/master/javascript/atoms/dom.js#L577
WebDriver规范定义了这个 -
小智 27
有时这意味着页面上有多个元素具有您尝试搜索的相同属性,并且您"正在与错误的对话".
如果您的元素不能通过:id或:name(或:class)唯一标识,则可能会很棘手.
有时通过:xpath搜索元素会有所帮助,在某些情况下甚至是不切实际的.
在这些情况下,您可能必须获取符合条件的所有元素,并通过索引引用正确的元素.它很脏,但它有效.
我正在使用Ruby on Rails应用程序中的Selenium/Watir,所以在我的例子中,例子是:
browser = Watir::Browser.new(:firefox, :profile => "default")
browser.goto("http://www.google.com/analytics")
# login
browser.divs(:text, "+ New Property").last.click
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
myn*_*hno 15
我遇到了类似的问题,但它与视口中不可见的元素有关.我拍了一张截图,发现浏览器窗口太窄,无法看到元素.我做了其中一个并且它有效:
driver.maximize_window()
Run Code Online (Sandbox Code Playgroud)
请参阅:WebDriver.maximize_window()
小智 7
或者您可以使用Selenium Action Class来模拟用户交互 - 例如
WebDriver = new FirefoxDriver();
WebElement menu = driver.findElement(By.xpath("")); // the triger event element
Actions build = new Actions(driver); // heare you state ActionBuider
build.moveToElement(menu).build().perform(); // Here you perform hover mouse over the needed elemnt to triger the visibility of the hidden
WebElement m2m= driver.findElement(By.xpath(""));//the previous non visible element
m2m.click();
Run Code Online (Sandbox Code Playgroud)
小智 6
还有另一种情况,可见元素将被识别为不可见:
为了检查你不想与之交互的元素是否已经转换了CSS,在CHROME上执行以下操作:
归档时间: |
|
查看次数: |
184928 次 |
最近记录: |