GVKun编程网logo

如何在PageObjectModel的PageFactory中添加显式等待?(page方法)

14

本文将介绍如何在PageObjectModel的PageFactory中添加显式等待?的详细情况,特别是关于page方法的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,

本文将介绍如何在PageObjectModel的PageFactory中添加显式等待?的详细情况,特别是关于page方法的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于Appium+Python之PO模型(Page object Model)、Fiori Elements objectPage component creation ui JSON model creation oModel.getMetaModel().load、java – ObjectMapper().createObjectNode与JsonNodeFactory.instance.objectNode()之间的区别?、JetPack Compose Pager 的 onPageSelected 回调的知识。

本文目录一览:

如何在PageObjectModel的PageFactory中添加显式等待?(page方法)

如何在PageObjectModel的PageFactory中添加显式等待?(page方法)

thread.sleep()在下面的代码中添加了硬代码等待。如何使用显式等待。我想等到“用户名”
WebElement出现。我的程序运行正常。我已经写了测试用例。

package com.pol.zoho.PageObjects;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.WebDriverWait;

public class ZohoLoginPage {

WebDriver driver;
public ZohoLoginPage(WebDriver driver)
{
    PageFactory.initElements(driver,this);
}

@FindBy(xpath=".//*[@id='lid']")
public WebElement email;

@FindBy(xpath=".//*[@id='pwd']")
public WebElement password;

@FindBy(xpath="//*[@id='signin_submit']")
public WebElement signin;

public void doLogin(String username,String userpassword)
{
    try {
        Thread.sleep(3000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    email.sendKeys(username);
    password.sendKeys(userpassword);
    signin.click();
}

}

Appium+Python之PO模型(Page object Model)

Appium+Python之PO模型(Page object Model)

思考:我们进行自动化测试时,如果把代码都写在一个脚本中,代码的可读性会变差,且后期代码维护也麻烦,最好的想法就是测试对象和测试用例可以分离,可以很快定位问题,代码可读性高,也比较容易理解。这里推荐大家在自动化框架中加入PO模型思想,那什么是PO模型呢?

所谓的PO就是page object,通俗解释一下就是每个页面当成一个对象,给这些页面写一个类,主要就是完成元素定位和业务操作;至于测试脚本要和ta区别开来,需要什么去这些页面类去调用即可。

上面流程图意思就是测试用例类调用不同的页面类,页面类调用公共基类,基类里面封装定义定位页面元素和基本业务操作方法。

BasePage.py(页面基类脚本)

# -*- coding: utf-8 -*-
''''''
Created on 2018-11-4
@author: 丹姐
Project:UI页面公共类
''''''

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import selenium.common.exceptions
from selenium.webdriver.common.by import By



#定义页面基类
class BasePage(object):
    #初始化
    def __init__(self,driver):
        self.driver=driver

    # 重写元素定位方法
    def find_element(self,timeout,poll_frequency,type,*loc):
        element=WebDriverWait(self.driver, timeout, poll_frequency).until(
            EC.presence_of_element_located((type,*loc)))
        return element


    # 重写定义send_keys方法
    def send_keys(self,timeout,poll_frequency,type,loc,value):
        try:
                self.find_element(timeout,poll_frequency,type,loc).clear()
                return self.find_element(timeout,poll_frequency,type,loc).send_keys(value)
        except AttributeError:
            print("%s 页面中未能找到 %s 元素" % (self,loc))

    # 重写定义click方法
    def click(self,timeout,poll_frequency,type,*loc):
        return self.find_element(timeout,poll_frequency,type,*loc).click()

    # 重写多元素定位方法
    def find_elements(self,timeout,poll_frequency,index,type,*loc ):
        elements = WebDriverWait(self.driver, timeout, poll_frequency).until(
            EC.presence_of_all_elements_located((type, *loc)))
        return elements[index]

LoginPage.py(登录页面脚本)

# coding=utf-8
''''''
Created on 2018-11-4
@author: 丹姐
Project:登录页面
''''''
from src.common.BasePage import BasePage
from selenium.webdriver.common.by import By


# 定义登录页面类,父类是BasePage


class Login(BasePage):
    etUser_loc = "com.baidu.baidu:id/et_name"
    etPws_loc = "com.baidu.baidu:id/et_pass"
    btnLogin_loc = "com.baidu.baidu:id/rt_login"


    def login_in(self, username, password):
       print(u''输入用户名'', username)
        self.send_keys(10, 0.1, By.ID, self.etUser_loc, username)
        print(u''输入密码'', password)
        self.send_keys(10, 0.1, By.ID, self.etPws_loc, password)
        print(u''点击登录按钮'')
        self.click(20, 0.1, By.ID, self.btnLogin_loc)

    

TestCase.py(测试用例脚本)

# coding=utf-8
''''''
Created on 2018-12-24
@author: 丹姐
Project:登录测试用例
''''''
import unittest
from config import DriverConfigure
from src.pages.Login import Login



class Login(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        driver = DriverConfigure.get_driver()
        cls.driver = driver


    def setUp(self):
        self.login_page = Login(self.driver)


    def test_login(self):
        # 登录
        self.login_page.login_in("zhanghao", "123456")


    def tearDown(self):
        pass

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()
if __name__ =="__main__":
 unittest.main()
 



 

Fiori Elements objectPage component creation ui JSON model creation oModel.getMetaModel().load

Fiori Elements objectPage component creation ui JSON model creation oModel.getMetaModel().load

Created by Wang, Jerry, last modified on Mar 22, 2016

clipboard1
clipboard2
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rTLETaoG-1576029053712)(https://user-images.githubusercontent.com/5669954/70514080-da88b900-1b6d-11ea-8ad9-f95ef1016737.png)]
clipboard4

本文分享 CSDN - 汪子熙。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

java – ObjectMapper().createObjectNode与JsonNodeFactory.instance.objectNode()之间的区别?

java – ObjectMapper().createObjectNode与JsonNodeFactory.instance.objectNode()之间的区别?

我看到一个 post关于向JsonNode插入新节点并遇到两个单独的答案,但我无法理解两者之间的区别.

根据我的经验,ObjectMapper不允许您创建除ObjectNode和ArrayNode之外的任何内容,而JsonNodeFactory允许您创建a whole bunch of nodes.

除此之外,还有什么其他差异?

另外,鉴于ObjectMapper是considered expensive,我想知道后一种方法是否更有效?

解决方法

以下方法之间没有区别:

ObjectMapper mapper = new ObjectMapper();
ObjectNode objectNode = mapper.createObjectNode();
ObjectNode objectNode = JsonNodeFactory.instance.objectNode();

在幕后,杰克逊将把createObjectNode()方法委托给JsonNodeFactory.

有关如何使用JsonNodeFactory的更多详细信息,请参阅此answer.

JetPack Compose Pager 的 onPageSelected 回调

JetPack Compose Pager 的 onPageSelected 回调

如何解决JetPack Compose Pager 的 onPageSelected 回调?

我正在使用 Accompanist 的 JetPack Compose Pager,我想知道如何确切知道我的页面何时显示在屏幕上。类似于 ViewPager 中的 onPageSelected 方法。

这是我的代码:

HorizontalPager(
        state = pagerState,modifier = Modifier
            .fillMaxSize()
            .background(MaterialTheme.colors.background)
    ) { page ->
         // This method reinvoked many times.

      }

因为目前每个重组都会从 Pager 调用该回调方法。

解决方法

想通了! 我们可以使用 LaunchedEffect 了解您的页面何时会成功显示。

HorizontalPager(
    state = pagerState,modifier = Modifier.fillMaxSize()
) { page ->
     LaunchedEffect(key1 = page,block = {
       if (!pagerState.isScrollInProgress) {
          // Here you are
       }
     })
  }

LaunchedEffect 每个键(当前页面)仅调用一次。 因此,使用此代码,您可以实现 onPageSelected 功能。

,

使用变量来跟踪

val trigger by remember { mutableStateOf (false) }
HorizontalPager(
        state = pagerState,modifier = Modifier
            .fillMaxSize()
            .background(MaterialTheme.colors.background)
    ) { page ->
         // Shown successfully,trigger = true //use at other places as a callback to change state
      }

我们今天的关于如何在PageObjectModel的PageFactory中添加显式等待?page方法的分享已经告一段落,感谢您的关注,如果您想了解更多关于Appium+Python之PO模型(Page object Model)、Fiori Elements objectPage component creation ui JSON model creation oModel.getMetaModel().load、java – ObjectMapper().createObjectNode与JsonNodeFactory.instance.objectNode()之间的区别?、JetPack Compose Pager 的 onPageSelected 回调的相关信息,请在本站查询。

本文标签: