Python selenium无法通过类名和xpath找到元素

时间:2017-03-20 16:58:14

标签: python selenium-webdriver

我是Selenium的新手。我开始通过书籍学习Selenium。我对Selenium的行为不清楚感到困惑。出于教育目的,我使用这个网站: http://magento-demo.lexiconn.com/ - 我正在尝试按类名找到搜索按钮(即:class ='按钮搜索按钮')或者按xpath

search_button = self.driver.find_element_by_xpath('/html/body/div/div[2]/header/div/div[4]/form/div[1]/button')

search_button = self.driver.find_element_by_class_name('button')

但每次硒都无法找到它。请帮我理解这种行为的原因。谢谢

我使用了Selenium IDE,它显示了XPATH://按钮[@ type ='submit']

当我试图通过xpath找到元素时,我遇到了同样的错误,这很奇怪。请指教。

我的代码是:

import unittest
from selenium import webdriver

class HomePageTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        #create new Firefox session
        cls.driver = webdriver.Firefox()
        cls.driver.implicitly_wait(30)
        cls.driver.maximize_window()

        #navvigate to application home page
        cls.driver.get('http://magento-demo.lexiconn.com/')

    def test_search__text_field_max_length(self):
        #get the search text box
        search_field=self.driver.find_element_by_id("search")

        #check maxlenght attribute st to 128
        self.assertEqual("128",search_field.get_attribute("maxlength"))

    def test_search_button_enabled(self):
        # get Search button
        search_button = self.driver.find_element_by_class_name('button')

        # check Search button is enabled
        self.assertTrue(search_button.is_enabled())



    @classmethod
    def tearDown(self):
        #close the browser window
        self.driver.quit()


if __name__=='__main__':
    unittest.main(verbosity=2)

4 个答案:

答案 0 :(得分:1)

试试这个:

search_button = self.driver.find_element_by_xpath('//button[@class="button search-button"]')

答案 1 :(得分:0)

尝试下载selenium IDE插件,安装并开始录制。单击所需的按钮,查看其目标在IDE中的记录方式。以编程方式,selenium将接受与IDE相同的xpath和其他选择器。在IDE中记录之后,目标字段上有一个下拉菜单,可以让您看到可以选择该元素的所有不同方式,即xpath与类等。

http://www.seleniumhq.org/projects/ide/

你可以试试:

css=button.button.search-button
//button[@type='submit']
//form[@id='search_mini_form']/div/button

答案 2 :(得分:0)

我认为问题在于您的定位器不够具体。页面上有多个button,页面上有多个带class =按钮的元素。这个CSS选择器对我有用。

self.driver.find_element_by_css_selector("button[title='Search']")

答案 3 :(得分:0)

使用xpath locator

尝试这种方式

说明:使用title标记的<button>属性。

self.driver.find_element_by_xpath("//button[@title='Search']")
  

OR

说明:使用title标记的type<button>属性。

self.driver.find_element_by_xpath("//button[@title='Search'][@type='submit']")