CcwpNewOrder_xiaomi

本文详细介绍了如何使用Selenium WebDriver实现小米寄件活动的自动化流程,包括登录、选择收件人、填写寄件信息、确认订单等步骤,全程自动化完成寄件任务。
package Ccwp;
//import java.awt.List;
import java.util.ArrayList;


import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriver.Navigation;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;






public class CcwpNewOrder_xiaomi {


/*public static void setMaxScroll(WebDriver driver){
 try {
  JavascriptExecutor jse=(JavascriptExecutor) driver;
  jse.executeScript("scroll(0,953)",null);
 } catch (Exception e) {
  e.printStackTrace();
 }   
}*/

//document.body.scrollTop

/*public static void setScroll(WebDriver driver,int height){
 try {
  String setscroll = "document.documentElement.scrollTop=" + height;
  
  JavascriptExecutor jse=(JavascriptExecutor) driver;
  System.out.println("++++++");
  jse.executeScript(setscroll,null);
  System.out.println("=========");
 } catch (Exception e) {
  System.out.println("Fail to set the scroll.");
 }   
} */
public static void main(String[] args) {
// TODO Auto-generated method stub
System.setProperty("webdriver.chrome.driver","E:\\autotest\\chromedriver_win3224\\chromedriver.exe");
//System.setProperty("webdriver.chrome.driver","E:\\GoogleChrome39/GoogleChrome39/GoogleChromePortable.exe");
 WebDriver driver1=new ChromeDriver();
 JavascriptExecutor jse=(JavascriptExecutor) driver1;
 Navigation navigation1=driver1.navigate();
 
 
navigation1.to("http://ccwp.sit.sf-express.com/service/setLogin?phone=13692212840&openId=2.0%3AoH6SdAHaDltBmW4csZs3%2FjVdCqI%3D&channel=2");
try{Thread.sleep(4000);
}catch(InterruptedException e){e.printStackTrace();}
navigation1.to("http://ccwp.sit.sf-express.com/page/xiaomi/index.html");
try{Thread.sleep(3000);
}catch(InterruptedException e){e.printStackTrace();}
driver1.manage().window().maximize();
try{Thread.sleep(1000);
}catch(InterruptedException e){e.printStackTrace();}
WebElement mailstuff=driver1.findElement(By.xpath("//*[@id='wrapper']/section[1]/ul/li[2]/a/h3"));
mailstuff.click();
try{Thread.sleep(2000);
}catch(InterruptedException e){e.printStackTrace();}
WebElement recev_info=driver1.findElement(By.xpath("//*[@id='selectSentHint']"));
recev_info.click();
try{Thread.sleep(4000);
}catch(InterruptedException e){e.printStackTrace();}
//选择收件人
WebElement select_receiv=driver1.findElement(By.xpath("/html/body/section[1]/form/ul/p/li[2]/div/div[1]/div/a/i"));
select_receiv.click();
try{Thread.sleep(3000);
}catch(InterruptedException e){e.printStackTrace();}
WebElement weight=driver1.findElement(By.xpath("//*[@id='wrapper']/section[3]/form/ul/li[5]/div/div[2]/div/a[2]"));
weight.click();
CharSequence[] cs= new CharSequence[1];
         cs[0] = "2016年货";
WebElement stuff_name=driver1.findElement(By.xpath("//*[@id='depositum']"));
stuff_name.sendKeys(cs);
CharSequence[] bj= new CharSequence[1];
         bj[0] = "1000";
WebElement bao_jia=driver1.findElement(By.xpath("//*[@id='insuredAmount']"));
bao_jia.sendKeys(bj);
CharSequence[] nt= new CharSequence[1];
         nt[0] = "易碎物品,小心取放";
WebElement note=driver1.findElement(By.xpath("//*[@id='orderRemark']"));
note.sendKeys(nt);
WebElement note_plus=driver1.findElement(By.xpath("//*[@id='climbStairs']"));
note_plus.click();
 
 
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 
WebElement target=driver1.findElement(By.xpath("//*[@id='orderConfirmBut']"));
ArrayList<WebElement> o=new ArrayList<WebElement>();
o.add(target);
jse.executeScript("arguments[0].scrollIntoView();", o.get(0));

//executeAsyncScript("arguments[0].scrollIntoView();",driver1.findElement(By.xpath("//*[@id='orderConfirmBut']")));
 
//setMaxScroll(driver1);
 
//setScroll(driver1,1000);
try{Thread.sleep(6000);
}catch(InterruptedException e){e.printStackTrace();}
  
// String js="var q=document.documentElement.scrollTop=10000";
//((JavascriptExecutor)driver1).executeScript("js");
//((JavascriptExecutor) driver1).executeScript(js);
//driver1.executeScript(js);
//WebElement agree_select=driver1.findElement(By.xpath("//*[@id='makeSure']"));
WebElement agree_select=driver1.findElement(By.id("makeSure"));
agree_select.click();
WebElement conf_order=driver1.findElement(By.xpath("//*[@id='orderConfirmBut']"));
conf_order.click();
 try{Thread.sleep(5000);
}catch(InterruptedException e){e.printStackTrace();}
String currenturl=driver1.getCurrentUrl();
System.out.println(currenturl);
String wenzi="{%22code%22:%22200%22";
if(currenturl.contains(wenzi))
System.out.println("小米寄件活动成功!");
else
System.out.println("小米寄件活动失败!");
 
driver1.quit();
}


}
<think> 根据用户的问题,他主要关心在Makefile中能否使用`ifdef CONFIG_SCSI_UFS_XIAOMI`,并且该变量在config文件中被设置为y。 结合之前的回答,我们已经知道: 1. Makefile支持`ifdef`条件判断。 2. `ifdef`检测的是变量是否被定义,即使变量的值为空字符串,也会返回真。 3. 变量`CONFIG_SCSI_UFS_XIAOMI`在config文件中被设置为`y`(非空),因此在Makefile中,只要该变量被正确地传递或定义,`ifdef`就会检测到。 关键点: - 如何确保config文件中的变量传递到Makefile中? 通常,在构建系统(如Linux内核)中,config文件(如.config)中的配置选项会被转换成Makefile变量。例如,在Linux内核的构建系统中,当你运行`make menuconfig`等命令后,.config文件会被处理,其中的配置选项(如`CONFIG_SCSI_UFS_XIAOMI=y`)会被导出到Makefile的环境中。 具体回答步骤: 1. 明确回答:可以使用`ifdef CONFIG_SCSI_UFS_XIAOMI`。 2. 解释原因:因为该变量在config文件中被设置为`y`,这意味着它在Makefile解析时已被定义(且非空字符串,虽然`ifdef`只关心是否定义,但这里值确实存在)。 3. 使用示例:给出一个Makefile的片段示例。 4. 注意事项:确保变量被正确传递(通常由构建系统自动完成)。 示例Makefile片段: ```makefile ifdef CONFIG_SCSI_UFS_XIAOMI # 如果定义了CONFIG_SCSI_UFS_XIAOMI,则执行这里的命令 OBJS += ufs_xiaomi.o endif ``` 注意事项: - 在Linux内核的构建系统中,实际上更常用的是`ifeq ($(CONFIG_SCSI_UFS_XIAOMI),y)`,因为这样可以明确检查变量的值是否为`y`。但使用`ifdef`也是有效的,因为变量已被定义(值为`y`,非空)。 因此,用户可以根据需要选择使用`ifdef`或`ifeq`。不过,如果变量可能被设置为`y`或`m`(模块),或者有其他值,则使用`ifeq`更精确。 相关问题设计: 1. 在Makefile中检查变量值为`y`应该使用什么条件语句? 2. 如何将.config文件中的配置传递给Makefile? 3. 在Makefile中,`ifdef`和`ifeq`哪种方式更推荐用于内核模块配置? </think> 在 Makefile 中 **完全可以使用 `ifdef CONFIG_SCSI_UFS_XIAOMI`**,尤其当该变量在 config 文件中被设置为 `y` 时。以下是详细解释: ### ✅ 为什么可以使用 1. **变量已定义**: - 当 `CONFIG_SCSI_UFS_XIAOMI` 在 config 文件中被设置为 `y` 时,它已被明确赋值 - `ifdef` 仅需检测变量是否定义(即使值为空或 `y`)[^2],因此条件判断结果为真 2. **典型使用场景**: ```makefile # 检查内核配置是否启用特定驱动 ifdef CONFIG_SCSI_UFS_XIAOMI obj-y += ufs_xiaomi.o # 编译到内核 EXTRA_CFLAGS += -DSUPPORT_XIAOMI # 添加编译宏 else $(warning Xiaomi UFS driver disabled) endif ``` ### 📝 使用注意事项 1. **变量传递方式**: - 确保 config 文件中的变量能传递到 Makefile(通常通过 `include` 或构建系统自动导出) - 例如在 Linux 内核中,`.config` 的变量会通过 `Kbuild` 系统自动导出到 Makefile 2. **与 `ifeq` 的区别**: ```makefile ifdef CONFIG_SCSI_UFS_XIAOMI # 只要变量定义即成立(即使值为空) ifeq ($(CONFIG_SCSI_UFS_XIAOMI),y) # 严格检查值为 y ``` 两者均可使用,但 `ifdef` 更宽松(只要定义就成立),`ifeq` 更精确(需匹配值)[^3] 3. **作用域限制**: - `ifdef` 在 Makefile **解析阶段**执行(非运行时) - 不能在规则命令中直接使用: ```makefile # ❌ 错误用法(自动化变量$@仅在运行时存在) build: ifdef CONFIG_SCSI_UFS_XIAOMI echo "Building for Xiaomi" endif # ✅ 正确用法(通过变量传递) ifdef CONFIG_SCSI_UFS_XIAOMI BUILD_CMD = build_xiaomi else BUILD_CMD = build_generic endif build: $(BUILD_CMD) ``` ### 🔍 验证建议 在 Makefile 中添加调试语句确认变量状态: ```makefile print_config: @echo "CONFIG_SCSI_UFS_XIAOMI = $(CONFIG_SCSI_UFS_XIAOMI)" @ifdef CONFIG_SCSI_UFS_XIAOMI ; then \ echo "ifdef: Defined" ; \ else \ echo "ifdef: Not defined" ; \ fi ``` 运行 `make print_config` 可查看实际状态。 > **结论**:在所述场景下完全可用,且是 Linux 内核驱动编译中的常见模式。只要确保 `CONFIG_SCSI_UFS_XIAOMI` 通过构建系统正确传递到 Makefile 环境即可[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值