在Selenium Python中使用ActionChains获取属性

在Selenium Python中使用ActionChains获取属性,python,selenium,selenium-webdriver,automation,pytest,Python,Selenium,Selenium Webdriver,Automation,Pytest,我们正在使用SeleniumPytest编写自动化脚本,并试图在文本框中获取值。文本框在元素内有一个标签(用作定位器)。但是,在第二个div中有另一个,输入在第二个div中(其中包含实际值。没有内置的唯一定位器可用,因此我使用了下面的定位器。请注意,实际页面有10个类似的文本框,具有与此处所述相同的HTML,但仅文本框名称不同 "//label[contains(., 'Textbox')]" 现在我必须单击并键入文本框,正常的selenium click方法返回Eleme

我们正在使用SeleniumPytest编写自动化脚本,并试图在文本框中获取值。文本框在元素内有一个标签(用作定位器)。但是,在第二个div中有另一个,输入在第二个div中(其中包含实际值。没有内置的唯一定位器可用,因此我使用了下面的定位器。请注意,实际页面有10个类似的文本框,具有与此处所述相同的HTML,但仅文本框名称不同

"//label[contains(., 'Textbox')]"
现在我必须单击并键入文本框,正常的selenium click方法返回ElementClickInterceptedException,因此我必须使用ActionChains。 ActionChains(驱动程序)。将\u移动到\u元素(驱动程序。通过\u xpath(元素)查找\u元素)。单击()。发送\u键(“示例”)。执行()

现在的问题是,我必须获取文本框中数据的值

driver.find_element_by_xpath(element).get_attribute('value')
但它没有按预期工作,并返回了相同的ElementNotInteractivatableException。请建议我是否可以使用任何其他方法获取输入中值的属性。我已经尝试了以下方法,但运气不佳,因为它返回了Nonetype

driver.find_element_by_xpath(element).text
我也尝试过使用所有其他定位器组合,但只发现上面提到的一个有效。请建议是否有任何方法可以使用ActionChains本身获取属性值

编辑#

  • 按照评论中的建议在下面添加HTML
  • '''

  • 添加在尝试@PDHide建议的选项#1时返回空值的屏幕截图。

  • 您正试图将密钥发送到无法交互的标签标记。您必须与输入标记交互。有两种方法:

    1.使用开关切换到活动元件:

    locator= "//label[contains(., 'Textbox')]"
    
    textbox = driver.find_element_by_xpath(locator)
    textbox.click()
    
    inputElement = driver.switch_to.active_element
    inputElement.send_keys("HIHIHIHIHI")
    
    print(inputElement.get_attribute('value'))
    
    print(textbox.text)
    
    inputElement = driver.find_element_by_xpath("//label[contains(., 'Textbox')]/..//input")
    
    inputElement.send_keys("HIHIHIHIHI")
    
    print(inputElement.get_attribute('value'))
    
    2.直接使用输入元素:

    locator= "//label[contains(., 'Textbox')]"
    
    textbox = driver.find_element_by_xpath(locator)
    textbox.click()
    
    inputElement = driver.switch_to.active_element
    inputElement.send_keys("HIHIHIHIHI")
    
    print(inputElement.get_attribute('value'))
    
    print(textbox.text)
    
    inputElement = driver.find_element_by_xpath("//label[contains(., 'Textbox')]/..//input")
    
    inputElement.send_keys("HIHIHIHIHI")
    
    print(inputElement.get_attribute('value'))
    
    输出:

    locator= "//label[contains(., 'Textbox')]"
    
    textbox = driver.find_element_by_xpath(locator)
    textbox.click()
    
    inputElement = driver.switch_to.active_element
    inputElement.send_keys("HIHIHIHIHI")
    
    print(inputElement.get_attribute('value'))
    
    print(textbox.text)
    
    inputElement = driver.find_element_by_xpath("//label[contains(., 'Textbox')]/..//input")
    
    inputElement.send_keys("HIHIHIHIHI")
    
    print(inputElement.get_attribute('value'))
    

    请添加您试图使用的元素的HTML
    。获取属性(“值”)
    on。或者只共享页面的URL,这会使您的工作更轻松helpers@Jortega根据建议在上面添加了HTML您可以在每个HTML行或smth中添加新行吗?这很难阅读。请查看HTML..textbox中的以下部分。那么问题中添加的HTML是什么?它包含在问题的HTML中还有@PDHide。请仔细阅读HTML。我直接从问题FWIW中的HTML复制了评论中的HTML片段。命名标签变量textbox有点混乱,因为它实际上是标签。