首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Send_keys上的selenium webdriver错误(Keys.ENTER)

Send_keys上的selenium webdriver错误(Keys.ENTER)
EN

Stack Overflow用户
提问于 2019-05-10 20:27:41
回答 2查看 4.9K关注 0票数 2
代码语言:javascript
复制
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome(r"C:\Users\m\Desktop\python\selen\chromedriver.exe")
driver.set_page_load_timeout(10)
driver.get("https://google.com")
driver.find_element_by_name("q").send_keys("Automation")
driver.find_element_by_name("btnk").send_keys(keys.ENTER)
time.sleep(4)
driver.quit()

我试着用这段简单的代码打开谷歌页面并搜索"automation“word,但是我得到了这样的结果,程序在下面一行停止运行:driver.find_element_by_name("btnk").send_keys(keys.ENTER)

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\Users\m\Desktop\python\selen\auto.py", line 9, in <module>
    driver.find_element_by_name("btnk").send_keys(keys.ENTER)
  File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 496, in find_element_by_name
    return self.find_element(by=By.NAME, value=name)
  File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
    'value': value})['value']
  File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"name","selector":"btnk"}
  (Session info: chrome=74.0.3729.131)
  (Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Windows NT 10.0.17134 x86_64)

有什么问题吗?

EN

回答 2

Stack Overflow用户

发布于 2019-05-10 21:04:42

请检查搜索按钮的'find_element_by_name‘或使用xpath。

我在java中运行脚本。希望这能帮助你...

要查找xpath,请使用selenium IDE

代码如下:

代码语言:javascript
复制
WebDriver driver =new FirefoxDriver();
driver.get("https://www.google.com");

WebDriverWait wait = new WebDriverWait (driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@name='q']")));

WebElement ele = driver.findElement(By.xpath("//input[@name='q']"));
ele.sendKeys("q");
driver.findElement(By.xpath("(//input[@name='btnK'])[2]")).sendKeys(Keys.ENTER);

one suggestion drop 'thread.sleep',因为它会在提到的时候停止程序。

睡眠代码中的Thread.sleep():将始终等待括号中提到的秒数,即使工作页面在1秒后准备就绪。所以这会减慢测试的速度。

显式等待:显式等待是一种等待特定条件出现,然后再继续执行代码的过程。

隐式等待:隐式等待是告诉WebDriver在试图查找一个或多个元素时轮询DOM一段时间,如果它们不能立即可用。默认设置为0

Is it good practise to use Thread.sleep while doing selenium Test?

编辑:

另请参阅此https://stackoverflow.com/a/56078618/4513879答案。

简单地说,Element is not reachable by keyboard意味着无法使用键盘访问该元素,这意味着您不会使用JS even.avoid与其进行物理交互。用户不能单击不可见、被覆盖或不在屏幕上的元素,等等。Selenium被设计为像用户一样工作,当用户不能单击某个元素时抛出错误。

要了解更多信息,请访问https://stackoverflow.com/a/49872160/4513879 this answer。

更新代码:-

代码语言:javascript
复制
WebDriver driver =new FirefoxDriver();
driver.get("https://www.google.com");

WebDriverWait wait = new WebDriverWait (driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@name='q']")));

WebElement ele = driver.findElement(By.xpath("//input[@name='q']"));
ele.sendKeys("q");

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.name("btnK"))).click();

在上面的代码中,我添加了new WebDriverWait(driver,20).until(ExpectedConditions.elementToBeClickable(By.name("btnK"))).click();这一行。

票数 3
EN

Stack Overflow用户

发布于 2019-05-10 22:37:35

K应该是大写的。它区分大小写

更改此设置:

代码语言:javascript
复制
driver.find_element_by_name("btnk").send_keys(keys.ENTER)

要这样做:

代码语言:javascript
复制
driver.find_element_by_name("btnK").send_keys(keys.ENTER)

还有一些其他的观察。似乎有两个元素具有完全相同的属性,因此您可能仍然会遇到问题。

作为该问题的一种可能的解决方法,您可以尝试使用此方法,而不是find_element_by_name

代码语言:javascript
复制
from selenium.webdriver.support import expected_conditions as EC

EC.element_to_be_clickable(By.name("btnK"))).click()

此外,对于按钮,我认为你会想要click,而不是send_keys

干杯:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56077734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档