在官方W3c webdirver文档中,明确指出位置策略是:
State Keyword
CSS selector "css selector"
Link text selector "link text"
Partial link text selector "partial link text"
Tag name "tag name"
XPath selector "xpath"
Run Code Online (Sandbox Code Playgroud)
但是,Selenium的电线协议允许:
class name
css selector
id
name
link text
partial link text
tag name
xpath
Run Code Online (Sandbox Code Playgroud)
在理论中,Selenium的文档已经过时,"真实"的故事在新的规范文档中.然而...
我在最新的Chrome自己的Webdriver上运行了一些测试,我可以确认这一点,name并且class name两者都有效; 但是,它们不符合规格.
我记得在Chromium问题上阅读他们只会实现官方的Webdriver规范.
现在:我知道通用答案,其中"规格并不总是100%遵循"等.但是,我想知道的是:
javascript selenium google-chrome chromium chrome-web-driver
我正在研究GWT应用程序(类似于Paint).在这里,我有一个HTML5 Canvas,其中有一个功能,滚动鼠标滚轮上下将放大和缩小画布.
我搜索了很多,但没有找到解决方法来解决这个问题.这是做了什么:
int PosX = 0;
int PosY = 10;
JavascriptExecutor executor = (JavascriptExecutor) getDriver();
String script = "document.getElementById('frontCanvas').scrollBy("
+ PosX + "," + PosY + ")";
executor.executeScript(script);
WebDriverWait wait = new WebDriverWait(getDriver(), 20);
wait.until(ExpectedConditions.javaScriptThrowsNoExceptions(script));
Run Code Online (Sandbox Code Playgroud)
现在,上面的代码正在为另一个Angular应用程序工作,我在其中向上和向下滚动一个div元素(它有一个滚动条),但它在我的画布上没有工作(它没有滚动条)在GWT应用程序中.
我正在使用Selenium 3.14.0并在Chrome浏览器上运行此代码.任何人都可以建议可以采取哪些措施来解决这个问题?
我正在尝试使用Selenium(Python)将"ENTER"传递给文本字段.文本框要求在新行上输入每个电话号码,因此它看起来像:
#Add the phone number#
Webelement.sendKeys(Keys.ENTER)
Run Code Online (Sandbox Code Playgroud)
我导入了以下库:
from selenium.webdriver.common.keys import Keys
Run Code Online (Sandbox Code Playgroud)
我得到的问题是它失败了:
AttributeError:'WebElement'对象没有属性'sendKeys'
有谁知道如何解决这个问题?我一直在寻找解决方案,但一直找不到任何东西.
我正在使用硒来抓取一些数据。
我点击的页面上有一个按钮说“custom_cols”。此按钮为我打开一个窗口,我可以在其中选择我的列。
这个新窗口有时需要一些时间才能打开(大约 5 秒)。所以为了处理这个我用过
WebDriverWait
Run Code Online (Sandbox Code Playgroud)
延迟为 20 秒。但有时它无法在新窗口中选择查找元素,即使该元素可见。这种情况只有十次发生一次,其余时间它都可以正常工作。
我也在其他地方使用了相同的功能(WebDriverWait),它按预期工作。我的意思是它会等到元素可见,然后在找到它的那一刻点击它。
我的问题是为什么即使我正在等待元素可见,新窗口上的元素也不可见。要在这里添加,我试图增加延迟时间,但我仍然偶尔会遇到该错误。
我的代码在这里
def wait_for_elem_xpath(self, delay = None, xpath = ""):
if delay is None:
delay = self.delay
try:
myElem = WebDriverWait(self.browser, delay).until(EC.presence_of_element_located((By.XPATH , xpath)))
except TimeoutException:
print ("xpath: Loading took too much time!")
return myElem
select_all_performance = '//*[@id="mks"]/body/div[7]/div[2]/div/div/div/div/div[2]/div/div[2]/div[2]/div/div[1]/div[1]/section/header/div'
self.wait_for_elem_xpath(xpath = select_all_performance).click()
Run Code Online (Sandbox Code Playgroud) python selenium web-scraping webdriverwait expected-condition
selenium ×4
python ×2
chromium ×1
html5-canvas ×1
java ×1
javascript ×1
mousewheel ×1
sendkeys ×1
web-scraping ×1