我正在使用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与不可见元素进行交互?
我仍然在学习并回答我的一个问题:在这里,我被告知它可能是因为有问题的元素不在视野中.
我查看了文档,所以这里是最相关的答案:这里
您可以使用"org.openqa.selenium.interactions.Actions"类移动到元素:
WebElement element = driver.findElement(By.id("my-id"));
Actions actions = new Actions(driver);
actions.moveToElement(element);
## actions.click();
actions.perform();
Run Code Online (Sandbox Code Playgroud)
当我尝试使用上面的内容滚动到元素时:它说WebElement没有定义.
我想这是因为我没有导入相关模块.有人可以指出我应该导入的内容吗?
编辑:正如alecxe所指出的,这是java代码.
但与此同时,在试图弄清楚它一段时间之后.我找到了WebElement的导入方法:
from selenium.webdriver.remote.webelement import WebElement
Run Code Online (Sandbox Code Playgroud)
可能会帮助像我这样的人.
如何,这也是一个很好的教训,IMO:
去:文档 的
class selenium.webdriver.remote.webelement.WebElement(parent, id_, w3c=False)
Run Code Online (Sandbox Code Playgroud)
需要分成上面提到的命令格式.
如何让Selenium WebDriver滚动到特定元素以在屏幕上显示它.我尝试了很多不同的选择,但没有运气.这不适用于c#绑定吗?
我可以让它跳转到特定的位置ex ((IJavaScriptExecutor)Driver).ExecuteScript("window.scrollTo(0, document.body.scrollHeight - 150)");
但是我希望能够将它发送到不同的元素,而不是每次都给出确切的位置.
public IWebElement Example { get { return Driver.FindElement(By.Id("123456")); } }
例1) ((IJavaScriptExecutor)Driver).ExecuteScript("arguments[0].scrollIntoView(true);", Example);
例2) ((IJavaScriptExecutor)Driver).ExecuteScript("window.scrollBy(Example.Location.X", "Example.Location.Y - 100)");
当我观看它时,它不会将页面跳转到元素,并且异常与屏幕外的元素匹配.
更新:我添加了一个bool ex = Example.Exists(); 之后检查结果.它确实存在(它是真的).它没有显示(因为它仍然在屏幕外,因为它没有移动到元素)它没有被选中??????
有人看到成功By.ClassName.有没有人知道这样做是否有问题By.Id在c#绑定中?
我正在尝试在Google云端硬盘中自动上传文件功能.
用于传递参数的元素隐藏为height - 0px.
任何用户操作都不会使此元素可见.所以我需要一个工作来点击元素不可见.
<input type="file" style="height: 0px; visibility: hidden; position: absolute; width: 340px; font-size: inherit;" multiple=""/>
Run Code Online (Sandbox Code Playgroud)
上述元素的xpath是 -
//*[@class='goog-menu goog-menu-vertical uploadmenu density-tiny']/input
Run Code Online (Sandbox Code Playgroud)
我在用
WebDriver.findElement(By.xpath(<xpath>).sendKeys(<uploadFile>)
Run Code Online (Sandbox Code Playgroud)
例外 -
org.openqa.selenium.ElementNotVisibleException
Run Code Online (Sandbox Code Playgroud)
我尝试过使用JavascriptExecutor.但无法找到确切的语法.
当一个元素与selenium不在视图中并且试图与它进行交互时,selenium通常会隐式地将元素滚动到视图中.这很好,除了令人讨厌的是它通常将元素放入视图中.我的意思是,如果元素在窗口下方,它将向下滚动,直到元素刚好接近窗口边缘.
通常这很好,但是当在一个带有边框的网站上工作时,这将导致许多这类错误
Selenium::WebDriver::Error::UnknownError:
unknown error: Element is not clickable at point (438, 747). Other element would receive the click: <body>...</body>
Run Code Online (Sandbox Code Playgroud)
因为网页的边框通常都在它上面,但无论如何都会尝试点击该元素.无论如何处理这个?也许在视线外时自动将元素移动到屏幕中心?我正在考虑通过红宝石修补猴子.
我正在使用Selenium和c#.
Selenium通常可以自动向下滚动到网页的底部以查找元素,但我对某个页面的问题可能会增加.
任何人都可以建议一旦它的大小增加就会向下滚动到页面底部的代码吗?
我正在使用FirefoxDriver webdriver.在firefox窗口中加载的页面是一个大页面,我想使用selenium滚动该页面.
我想知道如何做到这一点.
谢谢.
我正在尝试使用Selenium Webdriver/C#compile做一个箭头,但是当我尝试编译时,我收到此错误:
'Keys'是'OpenQA.Selenium.Keys'和'System.Windows.Forms.Keys'之间的模糊参考(CS0104)
我的代码:
driver.FindElement(By.Id("ctl00_PlaceHolderMain_ctrlChangeBillingAddress_ctrlChangeBillingAddress_txtBillingAddress")).SendKeys(Keys.ArrowDown);
driver.FindElement(By.Id("ctl00_PlaceHolderMain_ctrlChangeBillingAddress_ctrlChangeBillingAddress_txtBillingAddress")).SendKeys(Keys.Enter);
Run Code Online (Sandbox Code Playgroud) 我有一个动态页面,当用户向下滚动页面时加载产品.我想获得在显示页面上呈现的产品总数.目前我正在使用以下代码到底,直到显示所有产品.
elems = WebDriverWait(self.driver, 30).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "x")))
print len(elems)
a = len(elems)
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(4)
elem1 = WebDriverWait(self.driver, 30).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "x")))
b = len(elem1)
while b > a:
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(4)
elem1 = WebDriverWait(self.driver, 30).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "x")))
a = b
b = len(elem1)
print b
Run Code Online (Sandbox Code Playgroud)
这很好用,但我想知道是否有更好的选择呢?
Grid中有1000行,其中一列名为Username(具有不同的值).
并且网格每个视图只显示20行,其他行仅在滚动时加载(ajax).
那么,如何在网格中搜索特定的用户名,因为我们只有滚动时加载的元素.
请问Scrollintoview方法的帮助?或者我需要使用,window.scrollby()直到找到搜索到的项目?
我需要能够上下滚动才能找到与Selenium相关的元素。
我已经看到很多问题和答案,发现的主要思想是self.web_driver.execute_script("return arguments[0].scrollIntoView(true);", element),这就是我当前在代码中所拥有的。但这还不够好,因为此代码仅向下滚动,因此如果该元素位于可滚动视图的上部,则无法找到该元素。
因此,我需要一个先向上滚动(向上翻页?),然后开始向下滚动的脚本。
我尝试过这样的事情
self.web_driver.execute_script("return arguments[0].scrollIntoView(true);", element)
self.web_driver.execute_script("window.scrollTo(0, -document.body.scrollHeight);")
self.web_driver.execute_script("return arguments[0].scrollIntoView(true);", element)
Run Code Online (Sandbox Code Playgroud)
但这不会向上滚动:(
selenium ×9
c# ×3
java ×3
python ×3
webdriver ×2
ajax ×1
hidden-field ×1
javascript ×1
python-3.x ×1
ruby ×1