15889369825 发表于 2016-12-19 15:17:43

定位

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re

class test (unittest.TestCase):
    def setUp(self):
      self.driver = webdriver.Chrome()
      self.driver.implicitly_wait(30)
      self.base_url = "http://test.robotscloud.com/"
      self.verificationErrors = []
      self.accept_next_alert = True

    def test_89(self):
      driver = self.driver
      driver.get(self.base_url + "/")
      driver.find_element_by_id("email").send_keys("15889369825@163.com")
      driver.find_element_by_id("password").send_keys("123456")
      driver.find_element_by_id("check").send_keys("1111")
      driver.find_element_by_id("submit").click()
      driver.find_element_by_link_text(u"产品服务").click()
      driver.find_element_by_link_text(u"型号设置").click()
      driver.find_element_by_id("addUser").click()
      time.sleep(2)
      driver.find_element_by_id("product_type").click()
      driver.find_element_by_xpath("//span[@value='8']").click()
      driver.find_element_by_id("model_name").clear()
      driver.find_element_by_id("model_name").send_keys(u"水")
      driver.find_element_by_id("product_name").clear()
      driver.find_element_by_id("product_name").send_keys(u"水")
      driver.find_element_by_css_selector("div.radio.second > label.radio-label").click()
      driver.find_element_by_css_selector("div.radio.second > label.radio-label > input").click()
      driver.find_element_by_xpath("(//button[@type='button'])").click()
      driver.find_element_by_name("radio1").click()
      driver.find_element_by_id("foreignInput").click()
      driver.find_element_by_css_selector("input.text-panel.checkbox-input").clear()
      driver.find_element_by_css_selector("input.text-panel.checkbox-input").send_keys(u"今年")
      driver.find_element_by_id("time_market").click()
      driver.find_element_by_xpath("//div[@id='sizzle1482130990860']/table/tbody/tr/td").click()
      driver.find_element_by_name("radio2").click()
      driver.find_element_by_id("expected_shipments").clear()
      driver.find_element_by_id("expected_shipments").send_keys("10000")
      driver.find_element_by_id("product_introduction").clear()
      driver.find_element_by_id("product_introduction").send_keys("111")
      driver.find_element_by_xpath("(//button[@type='button'])").click()
      driver.find_element_by_xpath("(//div[@id='model-table']/table/tbody/tr/td)").click()
      driver.find_element_by_xpath("(//button[@type='button'])").click()
      driver.find_element_by_xpath("(//button[@type='button'])").click()

    def is_element_present(self, how, what):
      try: self.driver.find_element(by=how, value=what)
      except NoSuchElementException as e: return False
      return True

    def is_alert_present(self):
      try: self.driver.switch_to_alert()
      except NoAlertPresentException as e: return False
      return True

    def close_alert_and_get_its_text(self):
      try:
            alert = self.driver.switch_to_alert()
            alert_text = alert.text
            if self.accept_next_alert:
                alert.accept()
            else:
                alert.dismiss()
            return alert_text
      finally: self.accept_next_alert = True

    def tearDown(self):
      self.driver.quit()
      self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
    unittest.main()
定位不了      driver.find_element_by_xpath("//span[@value='8']").click()   求帮忙

Miss_love 发表于 2016-12-19 15:47:17

页面元素发出来

15889369825 发表于 2016-12-19 15:58:32

Miss_love 发表于 2016-12-19 15:47
页面元素发出来

<span class="btn btn-default" value="144" data-id="144">锤子手机</span>

若尘_51 发表于 2016-12-19 16:18:23

<span class="btn btn-default" value="144" data-id="144">锤子手机</span>
为啥你要写成 driver.find_element_by_xpath("//span[@value='8']").click()
8是哪里来的?

15889369825 发表于 2016-12-19 16:21:32

若尘_51 发表于 2016-12-19 16:18
锤子手机
为啥你要写成 driver.find_element_by_xpath("//span[@value='8']").click()
8是哪里来的?

8是其它名称的标识,我换的

梦想家 发表于 2016-12-19 16:22:06

:L对呀8是哪里来的

15889369825 发表于 2016-12-19 16:28:57

<span class="btn btn-default on" value="8" data-id="8">智能水杯</span>   我把144换成8而已

若尘_51 发表于 2016-12-19 16:30:51

15889369825 发表于 2016-12-19 16:28
智能水杯   我把144换成8而已

把定位附近的都HTML都附上来看看吧~~
最好是截图。

15889369825 发表于 2016-12-19 16:42:04

若尘_51 发表于 2016-12-19 16:30
把定位附近的都HTML都附上来看看吧~~
最好是截图。

没地方上传图片啊

若尘_51 发表于 2016-12-19 16:47:03

15889369825 发表于 2016-12-19 16:42
没地方上传图片啊

参考下文吧,估计你的就是这种情况:

有时候我们会碰到一些元素不可见,这个时候selenium就无法对这些元素进行操作了。例如,下面的情况:

Python                                                    
页面主要通过“display:none”来控制整个下拉框不可见。
这个时候如果直接操作这个下拉框,就会提示:

sel = driver.find_element_by_tag_name('select')
Select(sel).select_by_value('selectName')

exceptions.ElementNotVisibleException: Message: element not visible: Element is not currently visible and may not be manipulated

我们需要通过javaScript修改display的值:
js = 'document.querySelectorAll("select").style.display="block";'
driver.execute_script(js)
sel = driver.find_element_by_tag_name('select')
Select(sel).select_by_value('selectName')

执行完这句js代码后,就可以正常操作下拉框了。

document.querySelectorAll("select").style.display="block";
document.querySelectorAll("select")选择所有的select。
指定这一组标签里的第几个。
style.display="block";修改样式的display="block" ,表示可见。
执行完这句js代码后,就可以正常操作下拉框了。

15889369825 发表于 2016-12-19 17:08:13

终于传上来了,

15889369825 发表于 2016-12-19 17:11:12

若尘_51 发表于 2016-12-19 16:47
参考下文吧,估计你的就是这种情况:

有时候我们会碰到一些元素不可见,这个时候selenium就无法对这些 ...

页面元素

若尘_51 发表于 2016-12-19 17:19:52

15889369825 发表于 2016-12-19 17:11
页面元素

我执行了下你的脚本,并不是在哪个地方出错啊
都已经可以执行到driver.find_element_by_id("product_name").send_keys(u"水"),我用的是火狐。

你在driver.find_element_by_id("product_type").click()加个等待时间什么的吧
还是出错的话,截个报错的信息上来

15889369825 发表于 2016-12-19 17:32:36

若尘_51 发表于 2016-12-19 17:19
我执行了下你的脚本,并不是在哪个地方出错啊
都已经可以执行到driver.find_element_by_id("product_nam ...

加了个等待时间就好了,谢谢

黑盒测试 发表于 2016-12-19 19:58:44

你好,麻烦问下平时定位元素用css、xpath、正则
那个更好更方面点,避免重复元素问题呢?谢谢了

jingzizx 发表于 2016-12-31 13:45:57

:lol,学习了
页: [1]
查看完整版本: 定位