我正在尝试填写 (https://all-access.wax.io) 上的表格。当我使用 Javascript
document.getElementsByName("userName")[0].value = "Hello"
,然后我就可以将文本写入表单。但是,当我在 selenuim 中使用相同的概念时
driver.find_element_by_name("userName").send_keys("Hello")
,然后我得到:
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
当我执行时:
self.driver.find_element_by_name("userName")[1].send_keys("Hello")
这导致:
TypeError: 'WebElement' object is not subscriptable
我也尝试过等到内容加载完毕,以及使用 XPath 和其他选择器。我想我犯了一个简单的错误,但我已经好几个小时无法解决它了。
重现问题的代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
browser = webdriver.Chrome()
browser.get('https://all-access.wax.io')
browser.find_element_by_name("userName")[1].send_keys("hello")
print()
答案 0 :(得分:2)
CustomScrollView(
SliverAppBar(),
...
ValueListenableBuilder(
valueListenable: _list,
builder: (context, listBuilder, child) {
return SliverGrid(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
mainAxisSpacing: 16.0,
crossAxisSpacing: 16.0,
childAspectRatio: 635 / 889,
),
delegate: SliverChildBuilderDelegate(
(c, i) {
return ItemWidget(listBuilder[i]);
},
childCount: _list.value.length,
),
);
},
),
)
您想将 send_keys 发送到第二个输入标签而不是第一个。
答案 1 :(得分:1)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
browser = webdriver.Chrome()
browser.get('https://all-access.wax.io')
browser.find_element_by_name("userName").send_keys("hello")
print()
您正在使用 find_element 返回 webelement 而不是 array ,请使用 find_elements 或删除索引
答案 2 :(得分:1)
只有 name
属性的方法对我不起作用,因为当您尝试使用 [1] 访问时,仍有两个元素,因此定位器不是唯一的。
因此,我使用了父 pannels visible-desktop-only-flex
类并添加了显式等待。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
browser = webdriver.Chrome(executable_path='/snap/bin/chromium.chromedriver')
browser.get('https://all-access.wax.io')
wait = WebDriverWait(browser, 15)
wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='pannels visible-desktop-only-flex']//input[@name='userName']")))
browser.find_element_by_xpath("//div[@class='pannels visible-desktop-only-flex']//input[@name='userName']").send_keys("hello")