Selenium Python 2 按名称和值查找元素?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/24992511/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 05:35:04  来源:igfitidea点击:

Selenium Python 2 find element by name and value?

pythonseleniumpython-3.xselenium-webdriver

提问by user3883665

I have been trying to locate an element on a web page, this element has the same name as other elements and no id. It does have a different value, so I would like to find the element by the name AND the Value.

我一直试图在网页上定位一个元素,该元素与其他元素同名且没有 id。它确实有一个不同的值,所以我想通过名称和值来查找元素。

in my web page I have a search button:

在我的网页中,我有一个搜索按钮:

<input name="action" value=" Search " style=" border-style2;  font-size: 11;
                     font-family: arial, helvetica" border="0" type="submit">

I can't use name because I have another element with the same name and type:

我不能使用 name,因为我有另一个具有相同名称和类型的元素:

<input name="action" value=" Go " onclick=" return custRange('cust', 'd_custno');"
                     style=" border-style2;  font-size: 11; font-family: arial, helvetica"
                     border="0" type="submit">

I therefore tried to use xpath, I started by using the xpath checker to return the xpath which returned:

因此,我尝试使用 xpath,我首先使用 xpath 检查器返回返回的 xpath:

/x:html/x:body/x:center/x:table/x:tbody/x:tr/x:td/x:center/x:center[1]/x:table[2]/x:tbody/x:tr/x:td[1]/x:table[3]/x:tbody/x:tr[5]/x:td[2]/x:input[2]

Again pretty new to this but I'm assuming the "x:" shouldn't be in the path so I removed this and tried to find the element with the following:

再次对此很新,但我假设“x:”不应该在路径中,所以我删除了它并尝试找到具有以下内容的元素:

search = driver.find_element_by_xpath("//center[1]/table[2]/tbody/tr/td[1]/table[3]/tbody/tr[5]/td[2]/input[2]")
search.clickAndWait()

which resulted in:

这导致:

selenium.common.exceptions.NoSuchElementException: Message: 'Unable to find element with xpath == //center[1]/table[2]/tbody/tr/td[1]/table[3]/tbody/tr[5]/td[2]/input[2]'

So really I have 2 questions it would be great if someone could help with:

所以我真的有两个问题,如果有人可以提供帮助,那就太好了:

  1. is there a way to identify an element by name and value?
  2. obviously I'm missing something with xpath, is the way I'm trying to use xpath incorrect? if so could you suggest what I'm doing wrong?
  1. 有没有办法通过名称和值来识别元素?
  2. 显然我在 xpath 中遗漏了一些东西,我尝试使用 xpath 的方式不正确吗?如果是的话,你能建议我做错什么吗?

Any help greatly appreciated.

非常感谢任何帮助。

for completeness my unittest code is is as follows:

为了完整起见,我的单元测试代码如下:

import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

class umLoginTest(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Ie()
        self.driver.implicitly_wait(3)

    def test_login_to_um(self):
        driver = self.driver
        result_file = open("umLoginTest_result.txt", "w")
        driver.get("http://ps-iweb/UserManage/Home")
        self.assertIn("Welcome", driver.title)
        elem = driver.find_element_by_name("userLogin")
        elem.send_keys("pstevenson")
        password = driver.find_element_by_name("sec_password")
        password.send_keys("etc")
        password.send_keys(Keys.RETURN)
        test1 = driver.title
        result_file.write(str(test1))
        select = driver.find_element_by_name("conn_marketid")
        for option in select.find_elements_by_tag_name('option'):
            if option.text == 'Int Rate Swaps':
                option.click()
        search = driver.find_element_by_xpath("//center[1]/table[2]/tbody/tr/td[1]/table[3]/tbody/tr[5]/td[2]/input[2]")
        search.clickAndWait()

        result_file.close()

if __name__ == "__main__":
    unittest.main()

回答by Lara

Answering your questions,

回答你的问题,

1 - Yes you can,

1 - 是的,你可以,

driver.find_element_by_name(‘foo')

http://selenium-python.readthedocs.org/en/latest/api.html#selenium.webdriver.remote.webdriver.WebDriver.find_element_by_name

http://selenium-python.readthedocs.org/en/latest/api.html#selenium.webdriver.remote.webdriver.WebDriver.find_element_by_name

2 - I always try to avoid xpath because sometimes it doesn't work properly. Instead, you should always try to find by name or id .. I think is the best case.

2 - 我总是尽量避免使用 xpath,因为有时它无法正常工作。相反,您应该始终尝试按名称或 ID 查找 .. 我认为这是最好的情况。

回答by Uday

Following is the Java code, which i tried with your 2 controls specified above.

以下是 Java 代码,我尝试使用上面指定的 2 个控件。

driver= new FirefoxDriver();
driver.get("file:///D:/Programming%20Samples/Input.html");
driver.findElement(By.xpath("//*[@name='action'][@value='Go']")).click();
driver.findElement(By.xpath("//*[@name='action'][@value='Search']")).click();  //observed here in your HTML i see some spaces. Make sure giving the right value.

Hope above helps.

以上希望有所帮助。

回答by Ravikumar

Try this

尝试这个

//input[@name='action' and @value=' Search ']

回答by Sujata Khedkar

driver.find_element_by_xpath("//*[@value=' Search ']").click()

will definitely help.

肯定会有所帮助。