Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Selenium Python 2 find element by name and value?

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.

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:

<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:

/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:

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?

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()
like image 688
user3883665 Avatar asked Dec 06 '22 01:12

user3883665


1 Answers

Try this

//input[@name='action' and @value=' Search ']
like image 178
Ravikumar Avatar answered Dec 08 '22 14:12

Ravikumar