python3+selenium元素定位疑难杂症总结

2019-06-19  本文已影响0人  gz_tester

定位一组元素

self.driver.find_elements_by_class_name(element)

获取一组元素下的某个元素

# num: 从0开始计数,指定该组元素的第几个元素
self.driver.find_elements_by_class_name(element)[num]

上传图片和文件:注意,定位要定到input,要不然传不上去;最好用相对路径

# 获取图片的相对路径
path = '{0}/common/decorators/heard.jpg'.format(os.path.dirname(os.path.dirname(__file__)))
# 使用send_keys()方法上传
self.find_element_by_css_selector('input.ant-input').send_keys(path)

等待元素加载

from selenium.webdriver.support import wait
    def wait(self, element, by=By.CSS_SELECTOR, timeout=30, interval=0.5):
        """
        显示的等待页面加载并检查页面元素
        :param timeout:
        :param interval:
        :param element:
        :return:
        """
        wait.WebDriverWait(self.driver, timeout=timeout, poll_frequency=interval).until(EC.presence_of_element_located((by, element)))

    # 使用示例: 
    def find_element_by_xpath(self, element):
        """
        根据xpath点击获取元素
        :param element:
        :return:
        """
        self.wait(element, by=By.XPATH)
        return self.driver.find_element_by_xpath(element)

    def find_element_by_name(self, element):
        """
        根据name点击获取元素
        :param element:
        :return:
        """
        self.wait(element, by=By.NAME)
        return self.driver.find_element_by_name(element)

判断元素是否存在

from selenium.webdriver.support import wait

    def is_element_exist(self, locator: tuple):
        """
        结合 WebDriverWait 和 expected_conditions 判断元素是否存在,
        每间隔 1 秒判断一次,30s 超时,存在返回 True,不存返回 False
        :param locator: locator 为元组类型,如("id", "yoyo")
        :return:
        """
        try:
            wait.WebDriverWait(self.driver, 30, 1).until(EC.presence_of_element_located(locator))
            return True
        except:
            return False

拖动滚动条到指定element 可见的位置

    def set_scroll_into_view(self, element):
        """
        拖动滚动条到指定element 可见的位置
        element:定位的元素
        :return:
        """
        self.driver.execute_script("arguments[0].scrollIntoView();", element)

    # 使用示例
self.set_scroll_into_view(self.driver.find_element_by_css_selector("span.title___JTR8F"))

设置浏览器滚动条位置

    def set_window_scroll_position(self, x: int, y: int) -> None:
        """
        设置浏览器滚动条位置

        :param int x:横坐标
        :param int y:纵坐标
        :return:
        """

        scroll_top = int(self.driver.execute_script('return document.documentElement.scrollTop'))
        self.driver.execute_script('document.documentElement.scrollLeft={0};'.format(x))
        self.driver.execute_script('document.documentElement.scrollTop={0};'.format(y + scroll_top))

上一篇 下一篇

猜你喜欢

热点阅读