51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2437|回复: 15
打印 上一主题 下一主题

定位

[复制链接]
  • TA的每日心情
    开心
    2017-2-23 09:15
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]测试连长

    跳转到指定楼层
    1#
    发表于 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[name=\"radio\"]").click()
            driver.find_element_by_xpath("(//button[@type='button'])[13]").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[5]/td[6]").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'])[13]").click()
            driver.find_element_by_xpath("(//div[@id='model-table']/table/tbody/tr[5]/td[3])[2]").click()
            driver.find_element_by_xpath("(//button[@type='button'])[13]").click()
            driver.find_element_by_xpath("(//button[@type='button'])[13]").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()   求帮忙

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-12-31 08:59
  • 签到天数: 975 天

    连续签到: 1 天

    [LV.10]测试总司令

    2#
    发表于 2016-12-19 15:47:17 | 只看该作者
    页面元素发出来
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-23 09:15
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]测试连长

    3#
     楼主| 发表于 2016-12-19 15:58:32 | 只看该作者

    <span class="btn btn-default" value="144" data-id="144">锤子手机</span>
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-11-7 16:44
  • 签到天数: 290 天

    连续签到: 1 天

    [LV.8]测试军长

    4#
    发表于 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是哪里来的?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-23 09:15
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]测试连长

    5#
     楼主| 发表于 2016-12-19 16:21:32 | 只看该作者
    若尘_51 发表于 2016-12-19 16:18
    锤子手机
    为啥你要写成 driver.find_element_by_xpath("//span[@value='8']").click()  
    8是哪里来的?

    8是其它名称的标识,我换的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2024-7-8 09:00
  • 签到天数: 943 天

    连续签到: 1 天

    [LV.10]测试总司令

    6#
    发表于 2016-12-19 16:22:06 | 只看该作者
    对呀  8是哪里来的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-23 09:15
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]测试连长

    7#
     楼主| 发表于 2016-12-19 16:28:57 | 只看该作者
    <span class="btn btn-default on" value="8" data-id="8">智能水杯</span>   我把144换成8  而已
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-11-7 16:44
  • 签到天数: 290 天

    连续签到: 1 天

    [LV.8]测试军长

    8#
    发表于 2016-12-19 16:30:51 | 只看该作者
    15889369825 发表于 2016-12-19 16:28
    智能水杯   我把144换成8  而已

    把定位附近的都HTML都附上来看看吧~~
    最好是截图。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-23 09:15
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]测试连长

    9#
     楼主| 发表于 2016-12-19 16:42:04 | 只看该作者
    若尘_51 发表于 2016-12-19 16:30
    把定位附近的都HTML都附上来看看吧~~
    最好是截图。

    没地方上传图片啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-11-7 16:44
  • 签到天数: 290 天

    连续签到: 1 天

    [LV.8]测试军长

    10#
    发表于 2016-12-19 16:47:03 | 只看该作者

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

    有时候我们会碰到一些元素不可见,这个时候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")[0].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")[0].style.display="block";
    document.querySelectorAll("select")  选择所有的select。
    [0] 指定这一组标签里的第几个。
    style.display="block";  修改样式的display="block" ,表示可见。
    执行完这句js代码后,就可以正常操作下拉框了。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x

    评分

    参与人数 1测试积点 +10 收起 理由
    lsekfe + 10 积极回复获得测试积点10

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-23 09:15
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]测试连长

    11#
     楼主| 发表于 2016-12-19 17:08:13 | 只看该作者
    终于传上来了,

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-23 09:15
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]测试连长

    12#
     楼主| 发表于 2016-12-19 17:11:12 | 只看该作者
    若尘_51 发表于 2016-12-19 16:47
    参考下文吧,估计你的就是这种情况:

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

    页面元素

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-11-7 16:44
  • 签到天数: 290 天

    连续签到: 1 天

    [LV.8]测试军长

    13#
    发表于 2016-12-19 17:19:52 | 只看该作者

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

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

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-23 09:15
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]测试连长

    14#
     楼主| 发表于 2016-12-19 17:32:36 | 只看该作者
    若尘_51 发表于 2016-12-19 17:19
    我执行了下你的脚本,并不是在哪个地方出错啊
    都已经可以执行到driver.find_element_by_id("product_nam ...

    加了个等待时间就好了,谢谢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-5-10 09:16
  • 签到天数: 172 天

    连续签到: 2 天

    [LV.7]测试师长

    15#
    发表于 2016-12-19 19:58:44 | 只看该作者
    你好,麻烦问下平时定位元素用css、xpath、正则
    那个更好更方面点,避免重复元素问题呢?谢谢了
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-17 09:41 , Processed in 0.076056 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表